Micron Document
gIT-Syndikat Innsbruck


Displaying Raw • Download

gopher_rns/client.py HEAD (77dab076) Text, 18.12 KB

Tff7b72import T7ee787os
Tff7b72import T7ee787sys
Tff7b72import T7ee787tty
Tff7b72import T7ee787termios
Tff7b72import T7ee787tempfile
Tff7b72import T7ee787subprocess
Tff7b72import T7ee787threading
Tff7b72import T7ee787time
Tff7b72import T7ee787RNS

Tff7b72from T7ee787. Tff7b72import Te6edf3protocol
Tff7b72from T7ee787. Tff7b72import Te6edf3utils


Tff7b72class T56d364GopherClientTb4b4b4:
Tff7b72def Tff7b72__init__Tb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffreticulum Tff7b72= Te6edf3RNSTff7b72.Td2a8ffReticulumTb4b4b4(Te6edf3require_shared_instanceTff7b72=Tff7b72TrueTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffapp_name Tff7b72= Ta5d6ff"Ta5d6ffgopherTa5d6ff"
Tff7b72selfTff7b72.Td2a8ff_lock Tff7b72= Te6edf3threadingTff7b72.Td2a8ffLockTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ff_response_data Tff7b72= Ta5d6ffbTa5d6ff'Ta5d6ff'
Tff7b72selfTff7b72.Td2a8ff_response_complete Tff7b72= Tff7b72False
Tff7b72selfTff7b72.Td2a8ff_resource_failed Tff7b72= Tff7b72False

Tff7b72def Td2a8fffetchTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3dest_hashTb4b4b4, Te6edf3selectorTff7b72=Ta5d6ff"Ta5d6ff"Tb4b4b4, Te6edf3queryTff7b72=Tff7b72NoneTb4b4b4, Te6edf3timeoutTff7b72=T79c0ff120Tb4b4b4)Tb4b4b4:
Tff7b72with Tff7b72selfTff7b72.Td2a8ff_lockTb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_response_data Tff7b72= Ta5d6ffbTa5d6ff'Ta5d6ff'
Tff7b72selfTff7b72.Td2a8ff_response_complete Tff7b72= Tff7b72False
Tff7b72selfTff7b72.Td2a8ff_resource_failed Tff7b72= Tff7b72False

Tff7b72if Tffa657isinstanceTb4b4b4(Te6edf3dest_hashTb4b4b4, Tffa657strTb4b4b4)Tb4b4b4:
Te6edf3dest_hash Tff7b72= Tffa657bytesTff7b72.Td2a8fffromhexTb4b4b4(Te6edf3dest_hashTff7b72.Td2a8ffreplaceTb4b4b4(Ta5d6ff'Ta5d6ff<Ta5d6ff'Tb4b4b4, Ta5d6ff'Ta5d6ff'Tb4b4b4)Tff7b72.Td2a8ffreplaceTb4b4b4(Ta5d6ff'Ta5d6ff>Ta5d6ff'Tb4b4b4, Ta5d6ff'Ta5d6ff'Tb4b4b4)Tb4b4b4)

Te6edf3dest_identity Tff7b72= Te6edf3RNSTff7b72.Td2a8ffIdentityTff7b72.Td2a8ffrecallTb4b4b4(Te6edf3dest_hashTb4b4b4)
Tff7b72if Tff7b72not Te6edf3dest_identityTb4b4b4:
Te6edf3RNSTff7b72.Td2a8ffTransportTff7b72.Td2a8ffrequest_pathTb4b4b4(Te6edf3dest_hashTb4b4b4)
Te6edf3start Tff7b72= Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4)
Tff7b72while Te6edf3dest_identity Tff7b72is Tff7b72None Tff7b72and Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4) Tff7b72- Te6edf3start Tff7b72< Te6edf3timeoutTb4b4b4:
Te6edf3timeTff7b72.Td2a8ffsleepTb4b4b4(T79c0ff0.1Tb4b4b4)
Te6edf3dest_identity Tff7b72= Te6edf3RNSTff7b72.Td2a8ffIdentityTff7b72.Td2a8ffrecallTb4b4b4(Te6edf3dest_hashTb4b4b4)

Tff7b72if Te6edf3dest_identity Tff7b72is Tff7b72NoneTb4b4b4:
Tff7b72raise Tf85149ConnectionErrorTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffCould not resolve destination: Tffd700{Te6edf3dest_hashTff7b72.Td2a8ffhexTb4b4b4(Tb4b4b4)Tffd700}Ta5d6ff"Tb4b4b4)

Te6edf3destination Tff7b72= Te6edf3RNSTff7b72.Td2a8ffDestinationTb4b4b4(
Te6edf3dest_identityTb4b4b4, Te6edf3RNSTff7b72.Td2a8ffDestinationTff7b72.Td2a8ffOUTTb4b4b4, Te6edf3RNSTff7b72.Td2a8ffDestinationTff7b72.Td2a8ffSINGLETb4b4b4,
Tff7b72selfTff7b72.Td2a8ffapp_nameTb4b4b4, Ta5d6ff"Ta5d6ffserverTa5d6ff"
Tb4b4b4)

Tff7b72if Tff7b72not Te6edf3RNSTff7b72.Td2a8ffTransportTff7b72.Td2a8ffhas_pathTb4b4b4(Te6edf3dest_hashTb4b4b4)Tb4b4b4:
Te6edf3RNSTff7b72.Td2a8ffTransportTff7b72.Td2a8ffrequest_pathTb4b4b4(Te6edf3dest_hashTb4b4b4)
Te6edf3start Tff7b72= Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4)
Tff7b72while Tff7b72not Te6edf3RNSTff7b72.Td2a8ffTransportTff7b72.Td2a8ffhas_pathTb4b4b4(Te6edf3dest_hashTb4b4b4) Tff7b72and Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4) Tff7b72- Te6edf3start Tff7b72< T79c0ff30Tb4b4b4:
Te6edf3timeTff7b72.Td2a8ffsleepTb4b4b4(T79c0ff0.5Tb4b4b4)
Tff7b72if Tff7b72not Te6edf3RNSTff7b72.Td2a8ffTransportTff7b72.Td2a8ffhas_pathTb4b4b4(Te6edf3dest_hashTb4b4b4)Tb4b4b4:
Tff7b72raise Tf85149ConnectionErrorTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffNo path to destination Tffd700{Te6edf3dest_hashTff7b72.Td2a8ffhexTb4b4b4(Tb4b4b4)Tffd700}Ta5d6ff"Tb4b4b4)

Te6edf3link Tff7b72= Te6edf3RNSTff7b72.Td2a8ffLinkTb4b4b4(Te6edf3destinationTb4b4b4)

Te6edf3start Tff7b72= Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4)
Tff7b72while Te6edf3linkTff7b72.Td2a8ffstatus Tff7b72!= Te6edf3RNSTff7b72.Td2a8ffLinkTff7b72.Td2a8ffACTIVE Tff7b72and Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4) Tff7b72- Te6edf3start Tff7b72< Te6edf3timeoutTb4b4b4:
Tff7b72if Te6edf3linkTff7b72.Td2a8ffstatus Tff7b72== Te6edf3RNSTff7b72.Td2a8ffLinkTff7b72.Td2a8ffCLOSEDTb4b4b4:
Tff7b72raise Tf85149ConnectionErrorTb4b4b4(Ta5d6ff"Ta5d6ffLink establishment failedTa5d6ff"Tb4b4b4)
Te6edf3timeTff7b72.Td2a8ffsleepTb4b4b4(T79c0ff0.1Tb4b4b4)

Tff7b72if Te6edf3linkTff7b72.Td2a8ffstatus Tff7b72!= Te6edf3RNSTff7b72.Td2a8ffLinkTff7b72.Td2a8ffACTIVETb4b4b4:
Tff7b72raise Tf85149ConnectionErrorTb4b4b4(Ta5d6ff"Ta5d6ffLink establishment timeoutTa5d6ff"Tb4b4b4)

Te6edf3linkTff7b72.Td2a8ffset_resource_strategyTb4b4b4(Te6edf3RNSTff7b72.Td2a8ffLinkTff7b72.Td2a8ffACCEPT_ALLTb4b4b4)
Te6edf3linkTff7b72.Td2a8ffset_resource_concluded_callbackTb4b4b4(Tff7b72selfTff7b72.Td2a8ff_resource_concludedTb4b4b4)
Te6edf3linkTff7b72.Td2a8ffset_packet_callbackTb4b4b4(Tff7b72selfTff7b72.Td2a8ff_packet_callbackTb4b4b4)

Te6edf3request Tff7b72= Ta5d6fffTa5d6ff"Tffd700{Te6edf3selectorTffd700}Tffea00\tTffd700{Te6edf3queryTffd700}Ta5d6ff" Tff7b72if Te6edf3query Tff7b72else Te6edf3selector
Te6edf3RNSTff7b72.Td2a8ffPacketTb4b4b4(Te6edf3linkTb4b4b4, Te6edf3requestTff7b72.Td2a8ffencodeTb4b4b4(Ta5d6ff'Ta5d6ffutf-8Ta5d6ff'Tb4b4b4)Tb4b4b4)Tff7b72.Td2a8ffsendTb4b4b4(Tb4b4b4)

Te6edf3start Tff7b72= Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4)
Tff7b72while Tff7b72TrueTb4b4b4:
Tff7b72with Tff7b72selfTff7b72.Td2a8ff_lockTb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ff_response_complete Tff7b72or Tff7b72selfTff7b72.Td2a8ff_resource_failedTb4b4b4:
Tff7b72break
Tff7b72if Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4) Tff7b72- Te6edf3start Tff7b72>Tff7b72= Te6edf3timeoutTb4b4b4:
Tff7b72break
Te6edf3timeTff7b72.Td2a8ffsleepTb4b4b4(T79c0ff0.1Tb4b4b4)

Te6edf3linkTff7b72.Td2a8ffteardownTb4b4b4(Tb4b4b4)

Tff7b72with Tff7b72selfTff7b72.Td2a8ff_lockTb4b4b4:
Te6edf3completeTb4b4b4, Te6edf3failedTb4b4b4, Te6edf3data Tff7b72= Tff7b72selfTff7b72.Td2a8ff_response_completeTb4b4b4, Tff7b72selfTff7b72.Td2a8ff_resource_failedTb4b4b4, Tff7b72selfTff7b72.Td2a8ff_response_data

Tff7b72if Te6edf3failedTb4b4b4:
Tff7b72raise Tf85149ConnectionErrorTb4b4b4(Ta5d6ff"Ta5d6ffResource transfer failedTa5d6ff"Tb4b4b4)
Tff7b72if Tff7b72not Te6edf3completeTb4b4b4:
Tff7b72raise Tf85149TimeoutErrorTb4b4b4(Ta5d6ff"Ta5d6ffResponse timeoutTa5d6ff"Tb4b4b4)
Tff7b72return Te6edf3data

Tff7b72def Td2a8ff_packet_callbackTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3dataTb4b4b4, Te6edf3packetTb4b4b4)Tb4b4b4:
Tff7b72with Tff7b72selfTff7b72.Td2a8ff_lockTb4b4b4:
Tff7b72if Tffa657lenTb4b4b4(Te6edf3dataTb4b4b4) Tff7b72== T79c0ff0Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_response_complete Tff7b72= Tff7b72True

Tff7b72def Td2a8ff_resource_concludedTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3resourceTb4b4b4)Tb4b4b4:
Tff7b72with Tff7b72selfTff7b72.Td2a8ff_lockTb4b4b4:
Tff7b72if Te6edf3resourceTff7b72.Td2a8ffstatus Tff7b72== Te6edf3RNSTff7b72.Td2a8ffResourceTff7b72.Td2a8ffCOMPLETETb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_response_data Tff7b72= Te6edf3resourceTff7b72.Td2a8ffdataTff7b72.Td2a8ffreadTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ff_response_complete Tff7b72= Tff7b72True
Tff7b72elseTb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_resource_failed Tff7b72= Tff7b72True


Tff7b72class T56d364HistoryEntryTb4b4b4:
Tff7b72def Tff7b72__init__Tb4b4b4(Tff7b72selfTb4b4b4, Te6edf3destTb4b4b4, Te6edf3selectorTb4b4b4, Te6edf3cursorTff7b72=T79c0ff0Tb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffdest Tff7b72= Te6edf3dest
Tff7b72selfTff7b72.Td2a8ffselector Tff7b72= Te6edf3selector
Tff7b72selfTff7b72.Td2a8ffcursor Tff7b72= Te6edf3cursor


Tff7b72class T56d364UITb4b4b4:
Tff7b72def Tff7b72__init__Tb4b4b4(Tff7b72selfTb4b4b4, Te6edf3clientTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffclient Tff7b72= Te6edf3client
Tff7b72selfTff7b72.Td2a8ffhistory Tff7b72= Tb4b4b4[Tb4b4b4]
Tff7b72selfTff7b72.Td2a8ffcurrent_menu Tff7b72= Tb4b4b4[Tb4b4b4]
Tff7b72selfTff7b72.Td2a8ffcurrent_dest Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffcurrent_selector Tff7b72= Ta5d6ff"Ta5d6ff"
Tff7b72selfTff7b72.Td2a8ffcursor Tff7b72= T79c0ff0
Tff7b72selfTff7b72.Td2a8ffsearch_term Tff7b72= Ta5d6ff"Ta5d6ff"
Tff7b72selfTff7b72.Td2a8ffmessage Tff7b72= Ta5d6ff"Ta5d6ff"

Tff7b72def Td2a8ffrunTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3dest_hashTb4b4b4, Te6edf3selectorTff7b72=Ta5d6ff"Ta5d6ff"Tb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffcurrent_dest Tff7b72= Te6edf3dest_hash
Tff7b72selfTff7b72.Td2a8ffcurrent_selector Tff7b72= Te6edf3selector

Tff7b72tryTb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_fetch_and_displayTb4b4b4(Tb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Tffa657printTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffError: Tffd700{Te6edf3eTffd700}Ta5d6ff"Tb4b4b4)
Tff7b72return

Tff7b72selfTff7b72.Td2a8ff_main_loopTb4b4b4(Tb4b4b4)

Tff7b72def Td2a8ff_main_loopTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_term_settings Tff7b72= Te6edf3termiosTff7b72.Td2a8fftcgetattrTb4b4b4(Te6edf3sysTff7b72.Td2a8ffstdinTb4b4b4)
Tff7b72tryTb4b4b4:
Te6edf3ttyTff7b72.Td2a8ffsetrawTb4b4b4(Te6edf3sysTff7b72.Td2a8ffstdinTff7b72.Td2a8fffilenoTb4b4b4(Tb4b4b4)Tb4b4b4)
Tff7b72while Tff7b72TrueTb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_displayTb4b4b4(Tb4b4b4)
Te6edf3ch Tff7b72= Tff7b72selfTff7b72.Td2a8ff_read_keyTb4b4b4(Tb4b4b4)

Tff7b72if Te6edf3ch Tff7b72== Ta5d6ff'Ta5d6ffqTa5d6ff'Tb4b4b4:
Tff7b72break
Tff7b72elif Te6edf3ch Tff7b72in Tb4b4b4(Ta5d6ff'Ta5d6ffjTa5d6ff'Tb4b4b4, Ta5d6ff'Tffea00\x1bTa5d6ff[BTa5d6ff'Tb4b4b4)Tb4b4b4: T8b949e# down
Tff7b72selfTff7b72.Td2a8ff_move_cursorTb4b4b4(T79c0ff1Tb4b4b4)
Tff7b72elif Te6edf3ch Tff7b72in Tb4b4b4(Ta5d6ff'Ta5d6ffkTa5d6ff'Tb4b4b4, Ta5d6ff'Tffea00\x1bTa5d6ff[ATa5d6ff'Tb4b4b4)Tb4b4b4: T8b949e# up
Tff7b72selfTff7b72.Td2a8ff_move_cursorTb4b4b4(Tff7b72-T79c0ff1Tb4b4b4)
Tff7b72elif Te6edf3ch Tff7b72in Tb4b4b4(Ta5d6ff'Tffea00\rTa5d6ff'Tb4b4b4, Ta5d6ff'Tffea00\nTa5d6ff'Tb4b4b4, Ta5d6ff'Ta5d6fflTa5d6ff'Tb4b4b4, Ta5d6ff'Tffea00\x1bTa5d6ff[CTa5d6ff'Tb4b4b4)Tb4b4b4: T8b949e# enter/right
Tff7b72selfTff7b72.Td2a8ff_open_selectedTb4b4b4(Tb4b4b4)
Tff7b72elif Te6edf3ch Tff7b72in Tb4b4b4(Ta5d6ff'Ta5d6ffhTa5d6ff'Tb4b4b4, Ta5d6ff'Tffea00\x1bTa5d6ff[DTa5d6ff'Tb4b4b4)Tb4b4b4: T8b949e# left/back
Tff7b72selfTff7b72.Td2a8ff_go_backTb4b4b4(Tb4b4b4)
Tff7b72elif Te6edf3ch Tff7b72== Ta5d6ff'Ta5d6ffgTa5d6ff'Tb4b4b4:
Te6edf3termiosTff7b72.Td2a8fftcsetattrTb4b4b4(Te6edf3sysTff7b72.Td2a8ffstdinTb4b4b4, Te6edf3termiosTff7b72.Td2a8ffTCSADRAINTb4b4b4, Tff7b72selfTff7b72.Td2a8ff_term_settingsTb4b4b4)
Tff7b72selfTff7b72.Td2a8ff_goto_promptTb4b4b4(Tb4b4b4)
Te6edf3ttyTff7b72.Td2a8ffsetrawTb4b4b4(Te6edf3sysTff7b72.Td2a8ffstdinTff7b72.Td2a8fffilenoTb4b4b4(Tb4b4b4)Tb4b4b4)
Tff7b72elif Te6edf3ch Tff7b72== Ta5d6ff'Ta5d6ffGTa5d6ff'Tb4b4b4:
Te6edf3termiosTff7b72.Td2a8fftcsetattrTb4b4b4(Te6edf3sysTff7b72.Td2a8ffstdinTb4b4b4, Te6edf3termiosTff7b72.Td2a8ffTCSADRAINTb4b4b4, Tff7b72selfTff7b72.Td2a8ff_term_settingsTb4b4b4)
Tff7b72selfTff7b72.Td2a8ff_goto_line_promptTb4b4b4(Tb4b4b4)
Te6edf3ttyTff7b72.Td2a8ffsetrawTb4b4b4(Te6edf3sysTff7b72.Td2a8ffstdinTff7b72.Td2a8fffilenoTb4b4b4(Tb4b4b4)Tb4b4b4)
Tff7b72elif Te6edf3ch Tff7b72== Ta5d6ff'Ta5d6ff/Ta5d6ff'Tb4b4b4:
Te6edf3termiosTff7b72.Td2a8fftcsetattrTb4b4b4(Te6edf3sysTff7b72.Td2a8ffstdinTb4b4b4, Te6edf3termiosTff7b72.Td2a8ffTCSADRAINTb4b4b4, Tff7b72selfTff7b72.Td2a8ff_term_settingsTb4b4b4)
Tff7b72selfTff7b72.Td2a8ff_search_promptTb4b4b4(Tb4b4b4)
Te6edf3ttyTff7b72.Td2a8ffsetrawTb4b4b4(Te6edf3sysTff7b72.Td2a8ffstdinTff7b72.Td2a8fffilenoTb4b4b4(Tb4b4b4)Tb4b4b4)
Tff7b72elif Te6edf3ch Tff7b72== Ta5d6ff'Ta5d6ffnTa5d6ff'Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_search_nextTb4b4b4(Tb4b4b4)
Tff7b72elif Te6edf3ch Tff7b72== Ta5d6ff'Ta5d6ffNTa5d6ff'Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_search_prevTb4b4b4(Tb4b4b4)
Tff7b72elif Te6edf3ch Tff7b72== Ta5d6ff'Ta5d6ffHTa5d6ff'Tb4b4b4:
Te6edf3termiosTff7b72.Td2a8fftcsetattrTb4b4b4(Te6edf3sysTff7b72.Td2a8ffstdinTb4b4b4, Te6edf3termiosTff7b72.Td2a8ffTCSADRAINTb4b4b4, Tff7b72selfTff7b72.Td2a8ff_term_settingsTb4b4b4)
Tff7b72selfTff7b72.Td2a8ff_show_historyTb4b4b4(Tb4b4b4)
Te6edf3ttyTff7b72.Td2a8ffsetrawTb4b4b4(Te6edf3sysTff7b72.Td2a8ffstdinTff7b72.Td2a8fffilenoTb4b4b4(Tb4b4b4)Tb4b4b4)
Tff7b72elif Te6edf3ch Tff7b72== Ta5d6ff'Ta5d6ffrTa5d6ff'Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_reloadTb4b4b4(Tb4b4b4)
Tff7b72elif Te6edf3ch Tff7b72== Ta5d6ff'Ta5d6ffsTa5d6ff'Tb4b4b4:
Te6edf3termiosTff7b72.Td2a8fftcsetattrTb4b4b4(Te6edf3sysTff7b72.Td2a8ffstdinTb4b4b4, Te6edf3termiosTff7b72.Td2a8ffTCSADRAINTb4b4b4, Tff7b72selfTff7b72.Td2a8ff_term_settingsTb4b4b4)
Tff7b72selfTff7b72.Td2a8ff_save_promptTb4b4b4(Tb4b4b4)
Te6edf3ttyTff7b72.Td2a8ffsetrawTb4b4b4(Te6edf3sysTff7b72.Td2a8ffstdinTff7b72.Td2a8fffilenoTb4b4b4(Tb4b4b4)Tb4b4b4)
Tff7b72elif Te6edf3ch Tff7b72== Ta5d6ff'Ta5d6ff?Ta5d6ff'Tb4b4b4:
Te6edf3termiosTff7b72.Td2a8fftcsetattrTb4b4b4(Te6edf3sysTff7b72.Td2a8ffstdinTb4b4b4, Te6edf3termiosTff7b72.Td2a8ffTCSADRAINTb4b4b4, Tff7b72selfTff7b72.Td2a8ff_term_settingsTb4b4b4)
Tff7b72selfTff7b72.Td2a8ff_show_helpTb4b4b4(Tb4b4b4)
Te6edf3ttyTff7b72.Td2a8ffsetrawTb4b4b4(Te6edf3sysTff7b72.Td2a8ffstdinTff7b72.Td2a8fffilenoTb4b4b4(Tb4b4b4)Tb4b4b4)

Tff7b72finallyTb4b4b4:
Te6edf3termiosTff7b72.Td2a8fftcsetattrTb4b4b4(Te6edf3sysTff7b72.Td2a8ffstdinTb4b4b4, Te6edf3termiosTff7b72.Td2a8ffTCSADRAINTb4b4b4, Tff7b72selfTff7b72.Td2a8ff_term_settingsTb4b4b4)
Tffa657printTb4b4b4(Tb4b4b4)

Tff7b72def Td2a8ff_read_keyTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Te6edf3ch Tff7b72= Te6edf3sysTff7b72.Td2a8ffstdinTff7b72.Td2a8ffreadTb4b4b4(T79c0ff1Tb4b4b4)
Tff7b72if Te6edf3ch Tff7b72== Ta5d6ff'Tffea00\x1bTa5d6ff'Tb4b4b4:
Te6edf3ch2 Tff7b72= Te6edf3sysTff7b72.Td2a8ffstdinTff7b72.Td2a8ffreadTb4b4b4(T79c0ff1Tb4b4b4)
Tff7b72if Te6edf3ch2 Tff7b72== Ta5d6ff'Ta5d6ff[Ta5d6ff'Tb4b4b4:
Te6edf3ch3 Tff7b72= Te6edf3sysTff7b72.Td2a8ffstdinTff7b72.Td2a8ffreadTb4b4b4(T79c0ff1Tb4b4b4)
Tff7b72return Ta5d6ff'Tffea00\x1bTa5d6ff[Ta5d6ff' Tff7b72+ Te6edf3ch3
Tff7b72return Te6edf3ch

Tff7b72def Td2a8ff_fetch_and_displayTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tffa657printTb4b4b4(Ta5d6fffTa5d6ff"Tffea00\rTa5d6ffFetching Tffd700{Te6edf3utilsTff7b72.Td2a8fftruncate_hashTb4b4b4(Tff7b72selfTff7b72.Td2a8ffcurrent_destTb4b4b4)Tffd700}Ta5d6ff Tffd700{Tff7b72selfTff7b72.Td2a8ffcurrent_selectorTffd700}Ta5d6ff...Ta5d6ff"Tb4b4b4, Te6edf3endTff7b72=Ta5d6ff'Ta5d6ff'Tb4b4b4, Te6edf3flushTff7b72=Tff7b72TrueTb4b4b4)

Te6edf3data Tff7b72= Tff7b72selfTff7b72.Td2a8ffclientTff7b72.Td2a8fffetchTb4b4b4(Tff7b72selfTff7b72.Td2a8ffcurrent_destTb4b4b4, Tff7b72selfTff7b72.Td2a8ffcurrent_selectorTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffcurrent_menu Tff7b72= Te6edf3protocolTff7b72.Td2a8ffparse_menuTb4b4b4(Te6edf3dataTb4b4b4)
Tff7b72selfTff7b72.Td2a8ff_init_cursorTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffmessage Tff7b72= Ta5d6ff"Ta5d6ff"

Tff7b72def Td2a8ff_init_cursorTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72for Te6edf3iTb4b4b4, Te6edf3item Tff7b72in Tffa657enumerateTb4b4b4(Tff7b72selfTff7b72.Td2a8ffcurrent_menuTb4b4b4)Tb4b4b4:
Tff7b72if Te6edf3itemTff7b72.Td2a8ffis_navigableTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffcursor Tff7b72= Te6edf3i
Tff7b72return
Tff7b72selfTff7b72.Td2a8ffcursor Tff7b72= Tff7b72-T79c0ff1

Tff7b72def Td2a8ff_printTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3textTff7b72=Ta5d6ff"Ta5d6ff"Tb4b4b4)Tb4b4b4:
Te6edf3sysTff7b72.Td2a8ffstdoutTff7b72.Td2a8ffwriteTb4b4b4(Te6edf3text Tff7b72+ Ta5d6ff"Tffea00\rTffea00\nTa5d6ff"Tb4b4b4)

Tff7b72def Td2a8ff_displayTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Te6edf3sysTff7b72.Td2a8ffstdoutTff7b72.Td2a8ffwriteTb4b4b4(Ta5d6ff'Tffea00\x1bTa5d6ff[2JTffea00\x1bTa5d6ff[HTa5d6ff'Tb4b4b4)
Te6edf3nav_index Tff7b72= T79c0ff0
Tff7b72for Te6edf3iTb4b4b4, Te6edf3item Tff7b72in Tffa657enumerateTb4b4b4(Tff7b72selfTff7b72.Td2a8ffcurrent_menuTb4b4b4)Tb4b4b4:
Tff7b72if Te6edf3itemTff7b72.Td2a8ffis_navigableTb4b4b4(Tb4b4b4)Tb4b4b4:
Te6edf3prefix Tff7b72= Ta5d6ff'Ta5d6ff>Ta5d6ff' Tff7b72if Te6edf3i Tff7b72== Tff7b72selfTff7b72.Td2a8ffcursor Tff7b72and Tff7b72selfTff7b72.Td2a8ffcursor Tff7b72>Tff7b72= T79c0ff0 Tff7b72else Ta5d6ff'Ta5d6ff Ta5d6ff'
Te6edf3nav_index Tff7b72+Tff7b72= T79c0ff1
Tff7b72selfTff7b72.Td2a8ff_printTb4b4b4(Ta5d6fffTa5d6ff"Tffd700{Te6edf3prefixTffd700}Tffd700{Te6edf3nav_indexTffd700:Ta5d6ff3Tffd700}Ta5d6ff [Tffd700{Te6edf3itemTff7b72.Td2a8fflabelTb4b4b4(Tb4b4b4)Tffd700}Ta5d6ff] Tffd700{Te6edf3itemTff7b72.Td2a8ffdisplayTffd700}Ta5d6ff"Tb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_printTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ff Tffd700{Te6edf3itemTff7b72.Td2a8ffdisplayTffd700}Ta5d6ff"Tb4b4b4)

Tff7b72selfTff7b72.Td2a8ff_printTb4b4b4(Tb4b4b4)
Te6edf3dest_display Tff7b72= Te6edf3utilsTff7b72.Td2a8fftruncate_hashTb4b4b4(Tff7b72selfTff7b72.Td2a8ffcurrent_destTb4b4b4)
Tff7b72selfTff7b72.Td2a8ff_printTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ff[Tffd700{Te6edf3dest_displayTffd700}Ta5d6ff] Tffd700{Tff7b72selfTff7b72.Td2a8ffcurrent_selector Tff7b72or Ta5d6ff'Ta5d6ff/Ta5d6ff'Tffd700}Ta5d6ff"Tb4b4b4)

Tff7b72if Tff7b72selfTff7b72.Td2a8ffmessageTb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_printTb4b4b4(Tff7b72selfTff7b72.Td2a8ffmessageTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffmessage Tff7b72= Ta5d6ff"Ta5d6ff"

Te6edf3sysTff7b72.Td2a8ffstdoutTff7b72.Td2a8ffwriteTb4b4b4(Ta5d6ff"Ta5d6ff: Ta5d6ff"Tb4b4b4)
Te6edf3sysTff7b72.Td2a8ffstdoutTff7b72.Td2a8ffflushTb4b4b4(Tb4b4b4)

Tff7b72def Td2a8ff_move_cursorTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3deltaTb4b4b4)Tb4b4b4:
Te6edf3navigable Tff7b72= Tb4b4b4[Tb4b4b4(Te6edf3iTb4b4b4, Te6edf3itemTb4b4b4) Tff7b72for Te6edf3iTb4b4b4, Te6edf3item Tff7b72in Tffa657enumerateTb4b4b4(Tff7b72selfTff7b72.Td2a8ffcurrent_menuTb4b4b4) Tff7b72if Te6edf3itemTff7b72.Td2a8ffis_navigableTb4b4b4(Tb4b4b4)Tb4b4b4]
Tff7b72if Tff7b72not Te6edf3navigableTb4b4b4:
Tff7b72return

Te6edf3current_nav_idx Tff7b72= T79c0ff0
Tff7b72for Te6edf3idxTb4b4b4, Tb4b4b4(Te6edf3iTb4b4b4, Te6edf3_Tb4b4b4) Tff7b72in Tffa657enumerateTb4b4b4(Te6edf3navigableTb4b4b4)Tb4b4b4:
Tff7b72if Te6edf3i Tff7b72== Tff7b72selfTff7b72.Td2a8ffcursorTb4b4b4:
Te6edf3current_nav_idx Tff7b72= Te6edf3idx
Tff7b72break

Te6edf3new_nav_idx Tff7b72= Tb4b4b4(Te6edf3current_nav_idx Tff7b72+ Te6edf3deltaTb4b4b4) Tff7b72% Tffa657lenTb4b4b4(Te6edf3navigableTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffcursor Tff7b72= Te6edf3navigableTb4b4b4[Te6edf3new_nav_idxTb4b4b4]Tb4b4b4[T79c0ff0Tb4b4b4]

Tff7b72def Td2a8ff_open_selectedTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffcursor Tff7b72>Tff7b72= Tffa657lenTb4b4b4(Tff7b72selfTff7b72.Td2a8ffcurrent_menuTb4b4b4)Tb4b4b4:
Tff7b72return

Te6edf3item Tff7b72= Tff7b72selfTff7b72.Td2a8ffcurrent_menuTb4b4b4[Tff7b72selfTff7b72.Td2a8ffcursorTb4b4b4]
Tff7b72if Tff7b72not Te6edf3itemTff7b72.Td2a8ffis_navigableTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72return

Tff7b72if Te6edf3itemTff7b72.Td2a8fftype Tff7b72== Te6edf3protocolTff7b72.Td2a8ffITEM_DIRTb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_navigate_toTb4b4b4(Te6edf3itemTb4b4b4)
Tff7b72elif Te6edf3itemTff7b72.Td2a8fftype Tff7b72== Te6edf3protocolTff7b72.Td2a8ffITEM_TEXTTb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_view_textTb4b4b4(Te6edf3itemTb4b4b4)
Tff7b72elif Te6edf3itemTff7b72.Td2a8fftype Tff7b72== Te6edf3protocolTff7b72.Td2a8ffITEM_SEARCHTb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_do_searchTb4b4b4(Te6edf3itemTb4b4b4)
Tff7b72elif Te6edf3protocolTff7b72.Td2a8ffis_binary_typeTb4b4b4(Te6edf3itemTff7b72.Td2a8fftypeTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_download_or_openTb4b4b4(Te6edf3itemTb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_view_textTb4b4b4(Te6edf3itemTb4b4b4) T8b949e# default to text

Tff7b72def Td2a8ff_navigate_toTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3itemTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffhistoryTff7b72.Td2a8ffappendTb4b4b4(Te6edf3HistoryEntryTb4b4b4(Tff7b72selfTff7b72.Td2a8ffcurrent_destTb4b4b4, Tff7b72selfTff7b72.Td2a8ffcurrent_selectorTb4b4b4, Tff7b72selfTff7b72.Td2a8ffcursorTb4b4b4)Tb4b4b4)
Te6edf3dest Tff7b72= Te6edf3itemTff7b72.Td2a8ffdest Tff7b72if Te6edf3itemTff7b72.Td2a8ffdest Tff7b72else Tff7b72selfTff7b72.Td2a8ffcurrent_dest
Tff7b72tryTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffcurrent_dest Tff7b72= Te6edf3dest
Tff7b72selfTff7b72.Td2a8ffcurrent_selector Tff7b72= Te6edf3itemTff7b72.Td2a8ffselector
Tff7b72selfTff7b72.Td2a8ff_fetch_and_displayTb4b4b4(Tb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffmessage Tff7b72= Ta5d6fffTa5d6ff"Ta5d6ffError: Tffd700{Te6edf3eTffd700}Ta5d6ff"
Tff7b72if Tff7b72selfTff7b72.Td2a8ffhistoryTb4b4b4:
Te6edf3entry Tff7b72= Tff7b72selfTff7b72.Td2a8ffhistoryTff7b72.Td2a8ffpopTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffcurrent_dest Tff7b72= Te6edf3entryTff7b72.Td2a8ffdest
Tff7b72selfTff7b72.Td2a8ffcurrent_selector Tff7b72= Te6edf3entryTff7b72.Td2a8ffselector
Tff7b72selfTff7b72.Td2a8ffcursor Tff7b72= Te6edf3entryTff7b72.Td2a8ffcursor

Tff7b72def Td2a8ff_view_textTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3itemTb4b4b4)Tb4b4b4:
Te6edf3dest Tff7b72= Te6edf3itemTff7b72.Td2a8ffdest Tff7b72if Te6edf3itemTff7b72.Td2a8ffdest Tff7b72else Tff7b72selfTff7b72.Td2a8ffcurrent_dest
Tff7b72tryTb4b4b4:
Te6edf3data Tff7b72= Tff7b72selfTff7b72.Td2a8ffclientTff7b72.Td2a8fffetchTb4b4b4(Te6edf3destTb4b4b4, Te6edf3itemTff7b72.Td2a8ffselectorTb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffmessage Tff7b72= Ta5d6fffTa5d6ff"Ta5d6ffError: Tffd700{Te6edf3eTffd700}Ta5d6ff"
Tff7b72return

Te6edf3pager Tff7b72= Te6edf3osTff7b72.Td2a8ffenvironTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff'Ta5d6ffPAGERTa5d6ff'Tb4b4b4, Ta5d6ff'Ta5d6fflessTa5d6ff'Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ff_plumbTb4b4b4(Te6edf3pagerTb4b4b4, Te6edf3dataTb4b4b4)

Tff7b72def Td2a8ff_do_searchTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3itemTb4b4b4)Tb4b4b4:
Te6edf3termiosTff7b72.Td2a8fftcsetattrTb4b4b4(Te6edf3sysTff7b72.Td2a8ffstdinTb4b4b4, Te6edf3termiosTff7b72.Td2a8ffTCSADRAINTb4b4b4, Tff7b72selfTff7b72.Td2a8ff_term_settingsTb4b4b4)
Tff7b72tryTb4b4b4:
Te6edf3query Tff7b72= Tffa657inputTb4b4b4(Ta5d6ff"Ta5d6ffSearch: Ta5d6ff"Tb4b4b4)
Tff7b72except Tb4b4b4(Tf85149EOFErrorTb4b4b4, Tf85149KeyboardInterruptTb4b4b4)Tb4b4b4:
Tff7b72return
Tff7b72finallyTb4b4b4:
Te6edf3ttyTff7b72.Td2a8ffsetrawTb4b4b4(Te6edf3sysTff7b72.Td2a8ffstdinTff7b72.Td2a8fffilenoTb4b4b4(Tb4b4b4)Tb4b4b4)

Tff7b72if Tff7b72not Te6edf3queryTb4b4b4:
Tff7b72return

Te6edf3dest Tff7b72= Te6edf3itemTff7b72.Td2a8ffdest Tff7b72if Te6edf3itemTff7b72.Td2a8ffdest Tff7b72else Tff7b72selfTff7b72.Td2a8ffcurrent_dest
Tff7b72selfTff7b72.Td2a8ffhistoryTff7b72.Td2a8ffappendTb4b4b4(Te6edf3HistoryEntryTb4b4b4(Tff7b72selfTff7b72.Td2a8ffcurrent_destTb4b4b4, Tff7b72selfTff7b72.Td2a8ffcurrent_selectorTb4b4b4, Tff7b72selfTff7b72.Td2a8ffcursorTb4b4b4)Tb4b4b4)

Tff7b72tryTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffcurrent_dest Tff7b72= Te6edf3dest
Tff7b72selfTff7b72.Td2a8ffcurrent_selector Tff7b72= Te6edf3itemTff7b72.Td2a8ffselector
Te6edf3data Tff7b72= Tff7b72selfTff7b72.Td2a8ffclientTff7b72.Td2a8fffetchTb4b4b4(Te6edf3destTb4b4b4, Te6edf3itemTff7b72.Td2a8ffselectorTb4b4b4, Te6edf3queryTff7b72=Te6edf3queryTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffcurrent_menu Tff7b72= Te6edf3protocolTff7b72.Td2a8ffparse_menuTb4b4b4(Te6edf3dataTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffcursor Tff7b72= T79c0ff0
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffmessage Tff7b72= Ta5d6fffTa5d6ff"Ta5d6ffError: Tffd700{Te6edf3eTffd700}Ta5d6ff"
Tff7b72if Tff7b72selfTff7b72.Td2a8ffhistoryTb4b4b4:
Te6edf3entry Tff7b72= Tff7b72selfTff7b72.Td2a8ffhistoryTff7b72.Td2a8ffpopTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffcurrent_dest Tff7b72= Te6edf3entryTff7b72.Td2a8ffdest
Tff7b72selfTff7b72.Td2a8ffcurrent_selector Tff7b72= Te6edf3entryTff7b72.Td2a8ffselector
Tff7b72selfTff7b72.Td2a8ffcursor Tff7b72= Te6edf3entryTff7b72.Td2a8ffcursor

Tff7b72def Td2a8ff_download_or_openTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3itemTb4b4b4)Tb4b4b4:
Te6edf3dest Tff7b72= Te6edf3itemTff7b72.Td2a8ffdest Tff7b72if Te6edf3itemTff7b72.Td2a8ffdest Tff7b72else Tff7b72selfTff7b72.Td2a8ffcurrent_dest
Tff7b72if Te6edf3itemTff7b72.Td2a8fftype Tff7b72in Tb4b4b4(Te6edf3protocolTff7b72.Td2a8ffITEM_GIFTb4b4b4, Te6edf3protocolTff7b72.Td2a8ffITEM_IMAGETb4b4b4)Tb4b4b4:
Te6edf3handler Tff7b72= Te6edf3osTff7b72.Td2a8ffenvironTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff'Ta5d6ffGOPHER_IMAGETa5d6ff'Tb4b4b4, Ta5d6ff'Ta5d6fffehTa5d6ff'Tb4b4b4)
Tff7b72elif Te6edf3itemTff7b72.Td2a8fftype Tff7b72== Te6edf3protocolTff7b72.Td2a8ffITEM_AUDIOTb4b4b4:
Te6edf3handler Tff7b72= Te6edf3osTff7b72.Td2a8ffenvironTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff'Ta5d6ffGOPHER_AUDIOTa5d6ff'Tb4b4b4, Ta5d6ff'Ta5d6ffmpvTa5d6ff'Tb4b4b4)
Tff7b72elif Te6edf3itemTff7b72.Td2a8fftype Tff7b72== Te6edf3protocolTff7b72.Td2a8ffITEM_HTMLTb4b4b4:
Te6edf3handler Tff7b72= Te6edf3osTff7b72.Td2a8ffenvironTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff'Ta5d6ffGOPHER_HTMLTa5d6ff'Tb4b4b4, Ta5d6ff'Ta5d6fflynxTa5d6ff'Tb4b4b4)
Tff7b72elseTb4b4b4:
Te6edf3handler Tff7b72= Tff7b72None

Tff7b72tryTb4b4b4:
Te6edf3data Tff7b72= Tff7b72selfTff7b72.Td2a8ffclientTff7b72.Td2a8fffetchTb4b4b4(Te6edf3destTb4b4b4, Te6edf3itemTff7b72.Td2a8ffselectorTb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffmessage Tff7b72= Ta5d6fffTa5d6ff"Ta5d6ffError: Tffd700{Te6edf3eTffd700}Ta5d6ff"
Tff7b72return

Tff7b72if Te6edf3handlerTb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_plumbTb4b4b4(Te6edf3handlerTb4b4b4, Te6edf3dataTb4b4b4, Te6edf3itemTff7b72.Td2a8ffselectorTb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_save_dataTb4b4b4(Te6edf3dataTb4b4b4, Te6edf3itemTff7b72.Td2a8ffselectorTb4b4b4)

Tff7b72def Td2a8ff_plumbTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3programTb4b4b4, Te6edf3dataTb4b4b4, Te6edf3filenameTff7b72=Tff7b72NoneTb4b4b4)Tb4b4b4:
Te6edf3suffix Tff7b72= Ta5d6ff'Ta5d6ff'
Tff7b72if Te6edf3filenameTb4b4b4:
Te6edf3_Tb4b4b4, Te6edf3suffix Tff7b72= Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffsplitextTb4b4b4(Te6edf3filenameTb4b4b4)

Tff7b72with Te6edf3tempfileTff7b72.Td2a8ffNamedTemporaryFileTb4b4b4(Te6edf3modeTff7b72=Ta5d6ff'Ta5d6ffwbTa5d6ff'Tb4b4b4, Te6edf3suffixTff7b72=Te6edf3suffixTb4b4b4, Te6edf3deleteTff7b72=Tff7b72FalseTb4b4b4) Tff7b72as Te6edf3fTb4b4b4:
Te6edf3fTff7b72.Td2a8ffwriteTb4b4b4(Te6edf3dataTb4b4b4)
Te6edf3tmp_path Tff7b72= Te6edf3fTff7b72.Td2a8ffname

Tff7b72tryTb4b4b4:
Te6edf3subprocessTff7b72.Td2a8ffrunTb4b4b4(Tb4b4b4[Te6edf3programTb4b4b4, Te6edf3tmp_pathTb4b4b4]Tb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffmessage Tff7b72= Ta5d6fffTa5d6ff"Ta5d6ffFailed to run Tffd700{Te6edf3programTffd700}Ta5d6ff: Tffd700{Te6edf3eTffd700}Ta5d6ff"
Tff7b72finallyTb4b4b4:
Tff7b72tryTb4b4b4:
Te6edf3osTff7b72.Td2a8ffunlinkTb4b4b4(Te6edf3tmp_pathTb4b4b4)
Tff7b72except Tf85149ExceptionTb4b4b4:
Tff7b72pass

Tff7b72def Td2a8ff_save_dataTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3dataTb4b4b4, Te6edf3selectorTb4b4b4)Tb4b4b4:
Te6edf3filename Tff7b72= Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffbasenameTb4b4b4(Te6edf3selectorTb4b4b4) Tff7b72if Te6edf3selector Tff7b72else Ta5d6ff'Ta5d6ffdownloadTa5d6ff'
Tff7b72if Tff7b72not Te6edf3filenameTb4b4b4:
Te6edf3filename Tff7b72= Ta5d6ff'Ta5d6ffdownloadTa5d6ff'

Te6edf3termiosTff7b72.Td2a8fftcsetattrTb4b4b4(Te6edf3sysTff7b72.Td2a8ffstdinTb4b4b4, Te6edf3termiosTff7b72.Td2a8ffTCSADRAINTb4b4b4, Tff7b72selfTff7b72.Td2a8ff_term_settingsTb4b4b4)
Tff7b72tryTb4b4b4:
Te6edf3path Tff7b72= Tffa657inputTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffSave as [Tffd700{Te6edf3filenameTffd700}Ta5d6ff]: Ta5d6ff"Tb4b4b4)Tff7b72.Td2a8ffstripTb4b4b4(Tb4b4b4)
Tff7b72except Tb4b4b4(Tf85149EOFErrorTb4b4b4, Tf85149KeyboardInterruptTb4b4b4)Tb4b4b4:
Tff7b72return
Tff7b72finallyTb4b4b4:
Te6edf3ttyTff7b72.Td2a8ffsetrawTb4b4b4(Te6edf3sysTff7b72.Td2a8ffstdinTff7b72.Td2a8fffilenoTb4b4b4(Tb4b4b4)Tb4b4b4)

Tff7b72if Tff7b72not Te6edf3pathTb4b4b4:
Te6edf3path Tff7b72= Te6edf3filename

Tff7b72tryTb4b4b4:
Tff7b72with Tffa657openTb4b4b4(Te6edf3pathTb4b4b4, Ta5d6ff'Ta5d6ffwbTa5d6ff'Tb4b4b4) Tff7b72as Te6edf3fTb4b4b4:
Te6edf3fTff7b72.Td2a8ffwriteTb4b4b4(Te6edf3dataTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffmessage Tff7b72= Ta5d6fffTa5d6ff"Ta5d6ffSaved to Tffd700{Te6edf3pathTffd700}Ta5d6ff"
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffmessage Tff7b72= Ta5d6fffTa5d6ff"Ta5d6ffSave failed: Tffd700{Te6edf3eTffd700}Ta5d6ff"

Tff7b72def Td2a8ff_go_backTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72not Tff7b72selfTff7b72.Td2a8ffhistoryTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffmessage Tff7b72= Ta5d6ff"Ta5d6ffNo historyTa5d6ff"
Tff7b72return

Te6edf3entry Tff7b72= Tff7b72selfTff7b72.Td2a8ffhistoryTff7b72.Td2a8ffpopTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffcurrent_dest Tff7b72= Te6edf3entryTff7b72.Td2a8ffdest
Tff7b72selfTff7b72.Td2a8ffcurrent_selector Tff7b72= Te6edf3entryTff7b72.Td2a8ffselector

Tff7b72tryTb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_fetch_and_displayTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffcursor Tff7b72= Te6edf3entryTff7b72.Td2a8ffcursor
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffmessage Tff7b72= Ta5d6fffTa5d6ff"Ta5d6ffError: Tffd700{Te6edf3eTffd700}Ta5d6ff"

Tff7b72def Td2a8ff_goto_promptTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72tryTb4b4b4:
Te6edf3dest Tff7b72= Tffa657inputTb4b4b4(Ta5d6ff"Ta5d6ffGo to destination: Ta5d6ff"Tb4b4b4)Tff7b72.Td2a8ffstripTb4b4b4(Tb4b4b4)
Tff7b72except Tb4b4b4(Tf85149EOFErrorTb4b4b4, Tf85149KeyboardInterruptTb4b4b4)Tb4b4b4:
Tff7b72return

Tff7b72if Tff7b72not Te6edf3destTb4b4b4:
Tff7b72return

Te6edf3selector Tff7b72= Ta5d6ff"Ta5d6ff"
Tff7b72if Ta5d6ff'Ta5d6ff Ta5d6ff' Tff7b72in Te6edf3destTb4b4b4:
Te6edf3destTb4b4b4, Te6edf3selector Tff7b72= Te6edf3destTff7b72.Td2a8ffsplitTb4b4b4(Ta5d6ff'Ta5d6ff Ta5d6ff'Tb4b4b4, T79c0ff1Tb4b4b4)

Tff7b72selfTff7b72.Td2a8ffhistoryTff7b72.Td2a8ffappendTb4b4b4(Te6edf3HistoryEntryTb4b4b4(Tff7b72selfTff7b72.Td2a8ffcurrent_destTb4b4b4, Tff7b72selfTff7b72.Td2a8ffcurrent_selectorTb4b4b4, Tff7b72selfTff7b72.Td2a8ffcursorTb4b4b4)Tb4b4b4)

Tff7b72tryTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffcurrent_dest Tff7b72= Te6edf3dest
Tff7b72selfTff7b72.Td2a8ffcurrent_selector Tff7b72= Te6edf3selector
Tff7b72selfTff7b72.Td2a8ff_fetch_and_displayTb4b4b4(Tb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffmessage Tff7b72= Ta5d6fffTa5d6ff"Ta5d6ffError: Tffd700{Te6edf3eTffd700}Ta5d6ff"
Tff7b72if Tff7b72selfTff7b72.Td2a8ffhistoryTb4b4b4:
Te6edf3entry Tff7b72= Tff7b72selfTff7b72.Td2a8ffhistoryTff7b72.Td2a8ffpopTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffcurrent_dest Tff7b72= Te6edf3entryTff7b72.Td2a8ffdest
Tff7b72selfTff7b72.Td2a8ffcurrent_selector Tff7b72= Te6edf3entryTff7b72.Td2a8ffselector
Tff7b72selfTff7b72.Td2a8ffcursor Tff7b72= Te6edf3entryTff7b72.Td2a8ffcursor

Tff7b72def Td2a8ff_goto_line_promptTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72tryTb4b4b4:
Te6edf3line_str Tff7b72= Tffa657inputTb4b4b4(Ta5d6ff"Ta5d6ffGo to line: Ta5d6ff"Tb4b4b4)Tff7b72.Td2a8ffstripTb4b4b4(Tb4b4b4)
Tff7b72except Tb4b4b4(Tf85149EOFErrorTb4b4b4, Tf85149KeyboardInterruptTb4b4b4)Tb4b4b4:
Tff7b72return

Tff7b72tryTb4b4b4:
Te6edf3line_num Tff7b72= Tffa657intTb4b4b4(Te6edf3line_strTb4b4b4)
Tff7b72except Tf85149ValueErrorTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffmessage Tff7b72= Ta5d6ff"Ta5d6ffInvalid line numberTa5d6ff"
Tff7b72return

Te6edf3navigable Tff7b72= Tb4b4b4[Tb4b4b4(Te6edf3iTb4b4b4, Te6edf3itemTb4b4b4) Tff7b72for Te6edf3iTb4b4b4, Te6edf3item Tff7b72in Tffa657enumerateTb4b4b4(Tff7b72selfTff7b72.Td2a8ffcurrent_menuTb4b4b4) Tff7b72if Te6edf3itemTff7b72.Td2a8ffis_navigableTb4b4b4(Tb4b4b4)Tb4b4b4]
Tff7b72if T79c0ff1 Tff7b72<Tff7b72= Te6edf3line_num Tff7b72<Tff7b72= Tffa657lenTb4b4b4(Te6edf3navigableTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffcursor Tff7b72= Te6edf3navigableTb4b4b4[Te6edf3line_num Tff7b72- T79c0ff1Tb4b4b4]Tb4b4b4[T79c0ff0Tb4b4b4]
Tff7b72elseTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffmessage Tff7b72= Ta5d6fffTa5d6ff"Ta5d6ffLine out of range (1-Tffd700{Tffa657lenTb4b4b4(Te6edf3navigableTb4b4b4)Tffd700}Ta5d6ff)Ta5d6ff"

Tff7b72def Td2a8ff_search_promptTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72tryTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffsearch_term Tff7b72= Tffa657inputTb4b4b4(Ta5d6ff"Ta5d6ffSearch: Ta5d6ff"Tb4b4b4)Tff7b72.Td2a8ffstripTb4b4b4(Tb4b4b4)Tff7b72.Td2a8fflowerTb4b4b4(Tb4b4b4)
Tff7b72except Tb4b4b4(Tf85149EOFErrorTb4b4b4, Tf85149KeyboardInterruptTb4b4b4)Tb4b4b4:
Tff7b72return

Tff7b72if Tff7b72selfTff7b72.Td2a8ffsearch_termTb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_search_nextTb4b4b4(Tb4b4b4)

Tff7b72def Td2a8ff_search_nextTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72not Tff7b72selfTff7b72.Td2a8ffsearch_termTb4b4b4:
Tff7b72return

Te6edf3start Tff7b72= Tff7b72selfTff7b72.Td2a8ffcursor Tff7b72+ T79c0ff1
Tff7b72for Te6edf3i Tff7b72in Tffa657rangeTb4b4b4(Te6edf3startTb4b4b4, Tffa657lenTb4b4b4(Tff7b72selfTff7b72.Td2a8ffcurrent_menuTb4b4b4)Tb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffsearch_term Tff7b72in Tff7b72selfTff7b72.Td2a8ffcurrent_menuTb4b4b4[Te6edf3iTb4b4b4]Tff7b72.Td2a8ffdisplayTff7b72.Td2a8fflowerTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffcursor Tff7b72= Te6edf3i
Tff7b72return

Tff7b72for Te6edf3i Tff7b72in Tffa657rangeTb4b4b4(T79c0ff0Tb4b4b4, Te6edf3startTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffsearch_term Tff7b72in Tff7b72selfTff7b72.Td2a8ffcurrent_menuTb4b4b4[Te6edf3iTb4b4b4]Tff7b72.Td2a8ffdisplayTff7b72.Td2a8fflowerTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffcursor Tff7b72= Te6edf3i
Tff7b72return
Tff7b72selfTff7b72.Td2a8ffmessage Tff7b72= Ta5d6ff"Ta5d6ffNot foundTa5d6ff"

Tff7b72def Td2a8ff_search_prevTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72not Tff7b72selfTff7b72.Td2a8ffsearch_termTb4b4b4:
Tff7b72return

Te6edf3start Tff7b72= Tff7b72selfTff7b72.Td2a8ffcursor Tff7b72- T79c0ff1
Tff7b72for Te6edf3i Tff7b72in Tffa657rangeTb4b4b4(Te6edf3startTb4b4b4, Tff7b72-T79c0ff1Tb4b4b4, Tff7b72-T79c0ff1Tb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffsearch_term Tff7b72in Tff7b72selfTff7b72.Td2a8ffcurrent_menuTb4b4b4[Te6edf3iTb4b4b4]Tff7b72.Td2a8ffdisplayTff7b72.Td2a8fflowerTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffcursor Tff7b72= Te6edf3i
Tff7b72return

Tff7b72for Te6edf3i Tff7b72in Tffa657rangeTb4b4b4(Tffa657lenTb4b4b4(Tff7b72selfTff7b72.Td2a8ffcurrent_menuTb4b4b4) Tff7b72- T79c0ff1Tb4b4b4, Te6edf3startTb4b4b4, Tff7b72-T79c0ff1Tb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffsearch_term Tff7b72in Tff7b72selfTff7b72.Td2a8ffcurrent_menuTb4b4b4[Te6edf3iTb4b4b4]Tff7b72.Td2a8ffdisplayTff7b72.Td2a8fflowerTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffcursor Tff7b72= Te6edf3i
Tff7b72return
Tff7b72selfTff7b72.Td2a8ffmessage Tff7b72= Ta5d6ff"Ta5d6ffNot foundTa5d6ff"

Tff7b72def Td2a8ff_show_historyTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72not Tff7b72selfTff7b72.Td2a8ffhistoryTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffmessage Tff7b72= Ta5d6ff"Ta5d6ffNo historyTa5d6ff"
Tff7b72return

Tffa657printTb4b4b4(Ta5d6ff'Tffea00\x1bTa5d6ff[2JTffea00\x1bTa5d6ff[HTa5d6ff'Tb4b4b4, Te6edf3endTff7b72=Ta5d6ff'Ta5d6ff'Tb4b4b4)
Tffa657printTb4b4b4(Ta5d6ff"Ta5d6ffHistory:Ta5d6ff"Tb4b4b4)
Tffa657printTb4b4b4(Tb4b4b4)
Tff7b72for Te6edf3iTb4b4b4, Te6edf3entry Tff7b72in Tffa657enumerateTb4b4b4(Tff7b72selfTff7b72.Td2a8ffhistoryTb4b4b4)Tb4b4b4:
Tffa657printTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ff Tffd700{Te6edf3iTff7b72+T79c0ff1Tffd700}Ta5d6ff. [Tffd700{Te6edf3utilsTff7b72.Td2a8fftruncate_hashTb4b4b4(Te6edf3entryTff7b72.Td2a8ffdestTb4b4b4)Tffd700}Ta5d6ff] Tffd700{Te6edf3entryTff7b72.Td2a8ffselector Tff7b72or Ta5d6ff'Ta5d6ff/Ta5d6ff'Tffd700}Ta5d6ff"Tb4b4b4)
Tffa657printTb4b4b4(Tb4b4b4)
Tffa657inputTb4b4b4(Ta5d6ff"Ta5d6ffPress Enter to continue...Ta5d6ff"Tb4b4b4)

Tff7b72def Td2a8ff_reloadTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72tryTb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_fetch_and_displayTb4b4b4(Tb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffmessage Tff7b72= Ta5d6fffTa5d6ff"Ta5d6ffError: Tffd700{Te6edf3eTffd700}Ta5d6ff"

Tff7b72def Td2a8ff_save_promptTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffcursor Tff7b72>Tff7b72= Tffa657lenTb4b4b4(Tff7b72selfTff7b72.Td2a8ffcurrent_menuTb4b4b4)Tb4b4b4:
Tff7b72return

Te6edf3item Tff7b72= Tff7b72selfTff7b72.Td2a8ffcurrent_menuTb4b4b4[Tff7b72selfTff7b72.Td2a8ffcursorTb4b4b4]
Tff7b72if Tff7b72not Te6edf3itemTff7b72.Td2a8ffis_navigableTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72return

Te6edf3dest Tff7b72= Te6edf3itemTff7b72.Td2a8ffdest Tff7b72if Te6edf3itemTff7b72.Td2a8ffdest Tff7b72else Tff7b72selfTff7b72.Td2a8ffcurrent_dest

Tff7b72tryTb4b4b4:
Te6edf3data Tff7b72= Tff7b72selfTff7b72.Td2a8ffclientTff7b72.Td2a8fffetchTb4b4b4(Te6edf3destTb4b4b4, Te6edf3itemTff7b72.Td2a8ffselectorTb4b4b4)
Tff7b72selfTff7b72.Td2a8ff_save_dataTb4b4b4(Te6edf3dataTb4b4b4, Te6edf3itemTff7b72.Td2a8ffselectorTb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffmessage Tff7b72= Ta5d6fffTa5d6ff"Ta5d6ffError: Tffd700{Te6edf3eTffd700}Ta5d6ff"

Tff7b72def Td2a8ff_show_helpTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tffa657printTb4b4b4(Ta5d6ff'Tffea00\x1bTa5d6ff[2JTffea00\x1bTa5d6ff[HTa5d6ff'Tb4b4b4, Te6edf3endTff7b72=Ta5d6ff'Ta5d6ff'Tb4b4b4)
Tffa657printTb4b4b4(Ta5d6ff"Ta5d6ffGopher-RNS HelpTa5d6ff"Tb4b4b4)
Tffa657printTb4b4b4(Tb4b4b4)
Tffa657printTb4b4b4(Ta5d6ff"Ta5d6ff j/DOWN Move downTa5d6ff"Tb4b4b4)
Tffa657printTb4b4b4(Ta5d6ff"Ta5d6ff k/UP Move upTa5d6ff"Tb4b4b4)
Tffa657printTb4b4b4(Ta5d6ff"Ta5d6ff ENTER/l Open itemTa5d6ff"Tb4b4b4)
Tffa657printTb4b4b4(Ta5d6ff"Ta5d6ff h/LEFT Go backTa5d6ff"Tb4b4b4)
Tffa657printTb4b4b4(Ta5d6ff"Ta5d6ff g Go to destinationTa5d6ff"Tb4b4b4)
Tffa657printTb4b4b4(Ta5d6ff"Ta5d6ff G Go to line numberTa5d6ff"Tb4b4b4)
Tffa657printTb4b4b4(Ta5d6ff"Ta5d6ff / Search in menuTa5d6ff"Tb4b4b4)
Tffa657printTb4b4b4(Ta5d6ff"Ta5d6ff n Next search matchTa5d6ff"Tb4b4b4)
Tffa657printTb4b4b4(Ta5d6ff"Ta5d6ff N Previous search matchTa5d6ff"Tb4b4b4)
Tffa657printTb4b4b4(Ta5d6ff"Ta5d6ff H Show historyTa5d6ff"Tb4b4b4)
Tffa657printTb4b4b4(Ta5d6ff"Ta5d6ff r ReloadTa5d6ff"Tb4b4b4)
Tffa657printTb4b4b4(Ta5d6ff"Ta5d6ff s Save itemTa5d6ff"Tb4b4b4)
Tffa657printTb4b4b4(Ta5d6ff"Ta5d6ff q QuitTa5d6ff"Tb4b4b4)
Tffa657printTb4b4b4(Ta5d6ff"Ta5d6ff ? This helpTa5d6ff"Tb4b4b4)
Tffa657printTb4b4b4(Tb4b4b4)
Tffa657inputTb4b4b4(Ta5d6ff"Ta5d6ffPress Enter to continue...Ta5d6ff"Tb4b4b4)

Served by rngit 1.5.0 - Generated in 0.11s